/**
 * 权限检查工具函数
 */

/**
 * 检查用户是否有指定权限
 * @param {string} permissionCode 权限编码
 * @param {Array} userPermissions 用户权限列表
 * @returns {boolean} 是否有权限
 */
export function hasPermission(permissionCode, userPermissions) {
  if (!userPermissions || !Array.isArray(userPermissions)) {
    return false
  }
  return userPermissions.includes(permissionCode)
}

/**
 * 检查用户是否有指定角色
 * @param {string} roleCode 角色编码
 * @param {Array} userRoles 用户角色列表
 * @returns {boolean} 是否有角色
 */
export function hasRole(roleCode, userRoles) {
  if (!userRoles || !Array.isArray(userRoles)) {
    return false
  }
  return userRoles.includes(roleCode)
}

/**
 * 检查用户是否有管理员权限
 * @param {Array} userRoles 用户角色列表
 * @returns {boolean} 是否是管理员
 */
export function isAdmin(userRoles) {
  return hasRole('ADMIN', userRoles) || hasRole('SUPER_ADMIN', userRoles)
}

/**
 * 检查用户是否是超级管理员
 * @param {Array} userRoles 用户角色列表
 * @returns {boolean} 是否是超级管理员
 */
export function isSuperAdmin(userRoles) {
  return hasRole('SUPER_ADMIN', userRoles)
}

/**
 * 根据权限过滤菜单
 * @param {Array} menus 菜单列表
 * @param {Array} userPermissions 用户权限列表
 * @returns {Array} 过滤后的菜单列表
 */
export function filterMenusByPermission(menus, userPermissions) {
  if (!menus || !Array.isArray(menus)) {
    return []
  }

  return menus.filter(menu => {
    // 如果菜单有权限要求，检查用户是否有该权限
    if (menu.permissionCode && !hasPermission(menu.permissionCode, userPermissions)) {
      return false
    }

    // 递归过滤子菜单
    if (menu.children && menu.children.length > 0) {
      menu.children = filterMenusByPermission(menu.children, userPermissions)
    }

    return true
  })
}

/**
 * 根据角色过滤菜单
 * @param {Array} menus 菜单列表
 * @param {Array} userRoles 用户角色列表
 * @returns {Array} 过滤后的菜单列表
 */
export function filterMenusByRole(menus, userRoles) {
  if (!menus || !Array.isArray(menus)) {
    return []
  }

  return menus.filter(menu => {
    // 如果菜单有角色要求，检查用户是否有该角色
    if (menu.roleCode && !hasRole(menu.roleCode, userRoles)) {
      return false
    }

    // 递归过滤子菜单
    if (menu.children && menu.children.length > 0) {
      menu.children = filterMenusByRole(menu.children, userRoles)
    }

    return true
  })
}

/**
 * 检查按钮权限
 * @param {string} permissionCode 权限编码
 * @param {Object} userStore 用户store
 * @returns {boolean} 是否有权限
 */
export function checkButtonPermission(permissionCode, userStore) {
  if (!userStore || !userStore.permissions) {
    return false
  }
  return hasPermission(permissionCode, userStore.permissions)
}

/**
 * 检查页面权限
 * @param {string} permissionCode 权限编码
 * @param {Object} userStore 用户store
 * @returns {boolean} 是否有权限
 */
export function checkPagePermission(permissionCode, userStore) {
  if (!userStore || !userStore.permissions) {
    return false
  }
  return hasPermission(permissionCode, userStore.permissions)
}

/**
 * 获取用户可访问的菜单
 * @param {Object} userStore 用户store
 * @returns {Array} 可访问的菜单列表
 */
export function getUserAccessibleMenus(userStore) {
  if (!userStore || !userStore.menus) {
    return []
  }

  let accessibleMenus = userStore.menus

  // 根据权限过滤
  if (userStore.permissions) {
    accessibleMenus = filterMenusByPermission(accessibleMenus, userStore.permissions)
  }

  // 根据角色过滤
  if (userStore.roles) {
    accessibleMenus = filterMenusByRole(accessibleMenus, userStore.roles)
  }

  return accessibleMenus
}
